//Evaluate the value of an arithmetic expression in Reverse Polish Notation. 
//
// Valid operators are +, -, *, /. Each operand may be an integer or another exp
//ression. 
//
// Note: 
//
// 
// Division between two integers should truncate toward zero. 
// The given RPN expression is always valid. That means the expression would alw
//ays evaluate to a result and there won't be any divide by zero operation. 
// 
//
// Example 1: 
//
// 
//Input: ["2", "1", "+", "3", "*"]
//Output: 9
//Explanation: ((2 + 1) * 3) = 9
// 
//
// Example 2: 
//
// 
//Input: ["4", "13", "5", "/", "+"]
//Output: 6
//Explanation: (4 + (13 / 5)) = 6
// 
//
// Example 3: 
//
// 
//Input: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
//Output: 22
//Explanation: 
//  ((10 * (6 / ((9 + 3) * -11))) + 17) + 5
//= ((10 * (6 / (12 * -11))) + 17) + 5
//= ((10 * (6 / -132)) + 17) + 5
//= ((10 * 0) + 17) + 5
//= (0 + 17) + 5
//= 17 + 5
//= 22
// 
// Related Topics 栈


//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    fun evalRPN(tokens: Array<String>): Int {
        var result = 0
        val stack = Stack<Int>()
        for (s in tokens) {
            when(s){
                "+" -> {stack.push(stack.pop()+stack.pop())}
                "-" -> {
                     val second = stack.pop()
                    stack.push(stack.pop() - second)
                }
                "*" -> {stack.push(stack.pop()*stack.pop())}
                "/"-> {
                    val second = stack.pop()
                    stack.push(stack.pop() / second)
                }
                else -> stack.push(s.toInt())
            }
        }
        return stack.pop()

    }


}
//leetcode submit region end(Prohibit modification and deletion)
